package utils;

import org.apache.commons.lang.StringUtils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtil {

    public static final String DEFAULT_FORMAT = "yyyy-MM-dd hh:mm:ss";
    public static final String DEFAULT_SHORT_FORMAT = "yyyy-MM-dd";

    /**
     * 日期字符串转换成日期对象
     * @param date 要转换的日期
     * @return
     */
    public static Date stringToDate(String date){
        if(StringUtils.isEmpty(date)) return null;
        try{
            SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_FORMAT);
            return sdf.parse(date);
        }catch (Exception e){
            return null;
        }
    }

    /**
     * 日期字符串转换成日期对象
     * @param date 要转换的日期
     * @param format 转换格式
     * @return
     */
    public static Date stringToDate(String date, String format){
        if(StringUtils.isEmpty(date)) return null;
        if(StringUtils.isEmpty(format)) format = DEFAULT_FORMAT;
        try{
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            return sdf.parse(date);
        }catch (Exception e){
            return null;
        }
    }
    /**
     * 日期对象转换成字符串
     * @param date 要转换的日期
     * @return
     */
    public static String dateToString(Date date){
        if(date == null) return null;
        try{
            SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_FORMAT);
            return sdf.format(date);
        }catch (Exception e){
            return null;
        }
    }

    /**
     * 字符串转换成日期
     * @param date 要转换的日期
     * @param format 转换格式
     * @return
     */
    public static String dateToString(Date date, String format){
        if(date == null) return null;
        if(StringUtils.isEmpty(format)) format = DEFAULT_FORMAT;
        try{
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            return sdf.format(date);
        }catch (Exception e){
            return null;
        }
    }

    /**
     * 获得当天最小日期值
     * @return 当天最小值，例如：1990-01-01 00:00:00
     */
    public static Date getBeginOfDay() {
        return getEndOfDay(new Date());
    }

    /**
     * 获得指定日期当天最小值
     * @return 指定日期当天最小值，例如：1990-01-01 00:00:00
     */
    public static Date getBeginOfDay(Date date){
        if(date == null) return null;
        Calendar calendarInstance = Calendar.getInstance();
        calendarInstance.setTime(date);
        //设置每天的最大小时
        calendarInstance.set(Calendar.HOUR_OF_DAY, calendarInstance.getActualMinimum(Calendar.HOUR_OF_DAY));
        //设置每小时最大分钟
        calendarInstance.set(Calendar.MINUTE, calendarInstance.getActualMinimum(Calendar.MINUTE));
        //设置每分钟最大秒
        calendarInstance.set(Calendar.SECOND, calendarInstance.getActualMinimum(Calendar.SECOND));
        return calendarInstance.getTime();
    }

    /**
     * 获得当天最大日期值
     * @return 当天最大值，例如：1990-01-01 23:59:59
     */
    public static Date getEndOfDay() {
        return getEndOfDay(new Date());
    }

    /**
     * 获得指定日期当天最大值
     * @return 指定日期当天最大值，例如：1990-01-01 23:59:59
     */
    public static Date getEndOfDay(Date date){
        if(date == null) return null;
        Calendar calendarInstance = Calendar.getInstance();
        calendarInstance.setTime(date);
        //设置每天的最大小时
        calendarInstance.set(Calendar.HOUR_OF_DAY, calendarInstance.getActualMaximum(Calendar.HOUR_OF_DAY));
        //设置每小时最大分钟
        calendarInstance.set(Calendar.MINUTE, calendarInstance.getActualMaximum(Calendar.MINUTE));
        //设置每分钟最大秒
        calendarInstance.set(Calendar.SECOND, calendarInstance.getActualMaximum(Calendar.SECOND));
        return calendarInstance.getTime();
    }
}
